class WikiController < ApplicationController
  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
#  verify :method => :post, :only => [ :destroy, :create, :update ],
#         :redirect_to => { :action => :list }
  verify :method => :post, :only => [ :destroy, :create, :update ],
         :redirect_to => { :action => :index }

  def list
    @content_pages, @contents = paginate :contents, :per_page => 10
  end

  #
  # wikiページを表示する
  # ページが存在しない場合は、新規作成画面にリダイレクトする
  #
  def index

    # idが指定されていない場合、デフォルトページを表示する
    params[:id] = DEFAULT_PAGE unless params[:id]

    # 指定されたidのページを表示する
    @content = Content.find(:first, :conditions => ['title = ?', params[:id]])

    # ページが存在しない場合は、新規作成ページを表示する
    if @content == nil then
      redirect_to "#{_www_dir}#{params[:id]}/new"
      # すぐにリダイレクトする場合は return が必要
      return
    end

    #----------
    # 表示処理
    #----------
    @content.convert_body
#    unless @content.cache then
#      @content.convert_body
#      @content.save
#    end

    render :action => 'show'
  end

  def new
    title = (params[:id] == 'create') ? '' : params[:id]
    @content = Content.new(:body=>'', :title=>title)
    @content.tag_names = ''
    @freeze_flag = 0
  end

  def create
    @content = Content.new(params[:content])
    @freeze_flag = 0

    # 送信された凍結フラグが1ならパスワードをチェックし、送信された凍結フラグを使用する
    if params[:content][:freeze_flag].to_i == 1 then
      if _check_challenge_code params[:response_code]
        @content.freeze_flag = params[:content][:freeze_flag] if _check_challenge_code params[:response_code]
      else
        # パスワードが不正な場合、後でエラーメッセージを出すために保持させる
        @content.response_code = params[:response_code]
        @content.challenge_code = _get_challenge_code
      end
    end

    if @content.save
      # タグも保存する
      @content.save_tags

      flash[:notice] = 'Content was successfully created.'
      # 編集後はページ名のURLにリダイレクト
#      redirect_to :controller => @content.attributes['title']
      redirect_to "#{_www_dir}#{@content.attributes['title']}" # コントローラ名として指定すると小文字になってしまうため、仮実装
      return
    else
      render :action => 'new'
    end
  end

  #
  # メニューを表示する
  #
  def menu
    # 指定されたidのページを表示する
    @content = Content.find(:first, :conditions => ['title = ?', 'MenuBar'])

    #----------
    # 表示処理
    #----------
    @content.convert_body
#    unless @content.cache then
#      @content.convert_body
#      @content.save
#    end
    render :layout=>false
  end

  def edit
    @content = Content.find(params[:id])
    @content.tag_names = @content.tags.collect{|t| t.name}.join(',')
    @freeze_flag = @content.freeze_flag
  end

  def update

    # このパスワードチェック処理はContentsに移した方がよさそう
    @content = Content.find(params[:id])
    @content.cache = nil
    @content.title.strip!
    @content.response_code = params[:response_code]
    @content.challenge_code = _get_challenge_code_digest
    @content.freeze_flag = params[:content][:freeze_flag]

    if @content.update_attributes(params[:content])
      # タグも保存する
      @content.save_tags

      flash[:notice] = 'Content was successfully updated.'
      # 編集後はページ名のURLにリダイレクト
#      redirect_to :controller => @content.attributes['title']
      redirect_to "#{_www_dir}#{@content.attributes['title']}" # コントローラ名として指定すると小文字になってしまうため、仮実装
      return
    else
      render :action => 'edit'
    end
  end

#  def destroy
#    Content.find(params[:id]).destroy
#    redirect_to :action => 'list'
#  end

  def part_edit_js
    render :layout=>false
  end

  def captcha
    require 'rubygems'
    gem 'ruby-gd'
    gem 'captcha'
    require 'captcha'

    condition = {
      'key'          => '1234',
      'font'         => '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf',
      'font_size'    => 32.0,
      'x_spacing'    => 15,
      'max_wiggle_y' => 40,
      'rotation'     => 20,
      'image_dir'    => '/tmp/captcha',
    }
    captcha_web = CAPTCHA::Web.new(condition)
    captcha_web.file_name 'foo.png'
    image = captcha_web.image
#    image = CAPTCHA::ObfuscatedImage.create('1234', '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf', 32.0, 15, 40, 20)


#    png = image.png File.open("/tmp/foo", "w")

#    render :inline=>"foo"

    send_data image, :type => "image/png", :disposition => "inline"

  end

  def gif
    "x47x49x46x38x39x61x01x00x01x00x80x00x00xFFxFFxFFx00x00x00x21xF9x04x01x00x00x00x00x2Cx00x00x00x00x01x00x01x00x00x02x02x44x01x00x3B"
  end

#  #
#  # actionタイプのプラグインを実行する
#  #
#  def plugin
#    # プラグインオブジェクトを生成する
#    renderer = Content.get_renderer
#    renderer.content = Content.find(:first, :conditions => ['title = ?', params[:id]])
#    renderer.params  = params
#    if (wiki_plugin = WikiPlugin::Factory.create params[:cmd], renderer) then
#      wiki_plugin.action
#    end
#    redirect_to :controller=>'wiki', :action=>'index', :id=>params[:id]
#  end

end
